import compose from './compose'
/**
 * 注册中间件函数
 * @export
 * @param {*} middlewares 所有的中间件
 * @return {*} 
 */
export default function applyMiddleware(...middlewares) {
    // createStore 用于创建仓库的参数
    return function (createStore) {
        // 用于创建仓库
        return function (reducer, initState) {
            // 创建仓库
            const store = createStore(reducer, initState)
            // 防止一开始调用它
            let dispatch = () => { throw new Error('目前还不能使用dispatch') }
            const simpleStore = { getState: store.getState, dispatch: (...args) => store.dispatch(...args) }
            // 给dispatch赋值
            // 根据中间件数组，得到一个dispatch创建函数的数组
            const dispatchRroducers = middlewares.map(mid => mid(simpleStore))
            dispatch = compose(...dispatchRroducers)(store.dispatch)
            // 函数式编程的理念，不改变原有的对象
            return { ...store, dispatch }
        }
    }
}
